﻿namespace MicroCloud.Authorization
{
    #region "功能权限缓存的功能接口"
    /// <summary>
    /// 功能权限缓存的功能接口
    /// </summary>
    public interface IFunctionAuthCache
    {
        #region "方法"
        #region "创建功能角色权限缓存，只创建 功能-角色集合 的映射，用户-功能 的映射，遇到才即时创建并缓存"
        /// <summary>
        /// 创建功能角色权限缓存，只创建 功能-角色集合 的映射，用户-功能 的映射，遇到才即时创建并缓存
        /// </summary>
        void BuildRoleCaches();
        #endregion
        #region "移除指定功能的缓存"
        /// <summary>
        /// 移除指定功能的缓存
        /// </summary>
        /// <param name="functionIds">功能编号集合</param>
        void RemoveFunctionCaches(params long[] functionIds);
        #endregion
        #region "移除指定用户的缓存"
        /// <summary>
        /// 移除指定用户的缓存
        /// </summary>
        /// <param name="userIds">用户编号集合</param>
        void RemoveUserCaches(params string[] userIds);
        #endregion
        #region "获取能执行指定功能的所有角色"
        /// <summary>
        /// 获取能执行指定功能的所有角色
        /// </summary>
        /// <param name="functionId">功能编号</param>
        /// <param name="scopeProvider">局部服务提供者</param>
        /// <param name="forceRefresh">是否强制刷新</param>
        /// <returns>能执行功能的角色编号集合</returns>
        string[] GetFunctionRoles(long functionId, IServiceProvider scopeProvider = null, bool forceRefresh = false);
        #endregion
        #region "获取指定用户的所有特权功能"
        /// <summary>
        /// 获取指定用户的所有特权功能
        /// </summary>
        /// <param name="userId">用户编号</param>
        /// <returns>用户的所有特权功能编号集合</returns>
        long[] GetUserFunctions(string userId);
        #endregion

        #endregion

    }
    #endregion

}
